<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18450"></meta></head><body>
<h1 class="dtH1" style="PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-RIGHT: 10px"></h1>
<table width="100%"><tbody><tr><td bgcolor="#f4ecc5"><strong><font size="4">Синтаксис регулярных выражений</font></strong></td></tr></tbody></table><p><font size="1"></font> </p>
<p><font size="1">Регулярное выражение - это текстовый шаблон (образец), состоящий из обычных символов (например, символов от а до z) и специальных символов, известных как <i>метасимволы</i>. Этот шаблон описывает одну или более строк, которые должны обеспечить совпадения во время выполнения поиска в предложенном тексте. Регулярное выражение выполняет роль образца для сопоставления некоего символьного шаблона строке, в которой производится поиск.</font></p>
<p><font size="1">Вот несколько примеров регулярных выражений, которые могут Вам встретиться:</font></p>
<div class="tablediv">
<table class="dtTABLE" cellspacing="0" border="1"><tbody><tr bgcolor="#f8f2d8" valign="top"><th width="16%"><font size="1">Шаблон</font></th>
<th width="84%"><font size="1">Соответствие</font></th></tr><tr valign="top"><td width="16%"><font size="1">^\[ \t]*$</font></td>
<td width="84%"><font size="1">Соответствует пустой строке.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\d{2}-\d{5}</font></td>
<td width="84%"><font size="1">Проверяет на соответствие идентификационный номер, состоящий из 2-х цифр, дефиса и после еще 5-и цифр.</font></td></tr><tr valign="top"><td width="16%"><font size="1">&lt;(.*)&gt;.*&lt;\/\1&gt;</font></td>
<td width="84%"><font size="1">Соответствует HTML тэгу.</font></td></tr></tbody></table></div><a name="regexpsyntax"></a>
<p><font size="1"></font> </p>
<p><font size="1">Следующая таблица содержит полный список метасимволов и их поведения в контексте регулярных выражений:</font></p>
<div class="tablediv">
<table class="dtTABLE" cellspacing="0" border="1"><tbody><tr bgcolor="#f8f2d8" valign="top"><th width="16%"><font size="1">Символ</font></th>
<th width="84%"><font size="1">Описание</font></th></tr><tr valign="top"><td width="16%"><font size="1">\</font></td>
<td width="84%"><font size="1">Помечает следующий за ним символ как специальный символ, литерал, обратную ссылку или восьмеричную escape-последовательность. Например, 'n' соответствует символу "n", а '\n ' уже соответствует символу новой строки. Последовательность '\\' соответствует '\', '\(' соответствует '('.</font></td></tr><tr valign="top"><td width="16%"><font size="1">^</font></td>
<td width="84%"><font size="1">Соответствует положению в начале входной строки. Если свойство <b>Multiline</b> объекта <b>RegExp</b> установлено в значение True, ^ также соответствует и положению после '\n' или '\r'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">$</font></td>
<td width="84%"><font size="1">Соответствует положению в конце входной строки. Если свойство <b>Multiline</b> объекта <b>RegExp</b> установлено в значение True, $ также соответствует и положению перед '\n' или '\r'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">*</font></td>
<td width="84%"><font size="1">Соответствует повторению предшествующего подвыражения ноль или более раз. Например, 'zo*' соответствует 'z' и 'zoo'. * является эквивалентом {0,}.</font></td></tr><tr valign="top"><td width="16%"><font size="1">+</font></td>
<td width="84%"><font size="1">Соответствует повторению предшествующего подвыражения один или более раз. Например, 'zo+' соответствует 'zo' и 'zoo', но не соответствует 'z'. + является эквивалентом {1,}.</font></td></tr><tr valign="top"><td width="16%"><font size="1">?</font></td>
<td width="84%"><font size="1">Соответствует повторению предшествующего подвыражения ноль или один раз. Например, "do(es)?" соответствует "do" в "do" или в "does". ? является эквивалентом {0,1}</font></td></tr><tr valign="top"><td width="16%"><font size="1">{<i>n</i>}</font></td>
<td width="84%"><font size="1"><i>n</i> является положительным целым числом. Соответствует точно <i>n</i>-ному количеству повторений. Например, 'o{2}' не соответствует 'o' в "Bob", но соответствует 2-ум 'o' в "food".</font></td></tr><tr valign="top"><td width="16%"><font size="1">{<i>n</i>,}</font></td>
<td width="84%"><font size="1"><i>n</i> является положительным целым числом. Соответствует хотя бы <i>n</i>-ному количеству повторений. Например, 'o{2,}' не соответствует "o" в "Bob" но соответствует всем 'o' в "foooood". 'o{1,}' является эквивалентом 'o+'. 'o{0,}' является эквивалентом 'o*'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">{<i>n</i>,<i>m</i>}</font></td>
<td width="84%"><font size="1"><i>m</i> и <i>n</i> это положительные целые числа, причем <i>n</i> &lt;= <i>m</i>. Соответствует хотя бы <i>n</i>-ому и не более чем <i>m</i>-ому числу повторений. Например, "o{1,3}" соответствует первым трем 'o' в "fooooood". 'o{0,1}' является эквивалентом 'o?'. Обратите внимание, что Вы не можете размещать пробел между запятой и цифрами.</font></td></tr><tr valign="top"><td width="16%"><font size="1">?</font></td>
<td width="84%"><font size="1">Когда этот символ следует непосредственно за любым другим квантификатором (*, +, ?, {<i>n</i>}, {<i>n</i>,}, {<i>n</i>,<i>m</i>}), тогда шаблон соответствия становится "нежадным". "Нежадный" шаблон соответствует насколько это возможно минимальной части строки, в которой производится поиск, в то время как заданный по умолчанию "жадный" шаблон соответствует максимально возможно большей части этой строки. Например, 'o+?' в строке "oooo" соответствует одиночному "o", в то время как 'o+' соответствует всем 'o'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">.</font></td>
<td width="84%"><font size="1">Соответствует любому одиночному символу, кроме "\n". Чтобы шаблон соответствовал любому одиночному символу, включая и "\n", используйте выражение '[.\n]'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">(<i>шаблон</i>)</font></td>
<td width="84%"><font size="1">Соответствует <i>шаблону</i> и фиксирует это соответствие. Сохраненное соответствие может быть извлечено из коллекции соответствий с помощью объекта SubMatches. Чтобы добиться соответствия самим символам круглых скобок ( ), используйте '\(' или '\)'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">(?:<i>шаблон</i>)</font></td>
<td width="84%"><font size="1">Соответствует <i>шаблон</i>у, но при этом не фиксирует это соответствие, то есть является соответствием, не сохраняемым для возможного будущего использования. Удобно применять при объединении частей шаблона с помощью (|) (символа "ИЛИ"). Например, выражение 'industr(?:y|ies)' является более экономичным, чем выражение 'industry|industries'.</font></td></tr><tr valign="top"><td width="16%"><font size="1">(?=<i>pattern</i>)</font></td>
<td width="84%"><font size="1">Положительное "заглядыванием вперед". Соответствует исходной строке в любой точке где начинается соответствие шаблону. Это нефиксируемое соответстствие, а это означает то, что найденное совпадение не сохраняется для возможного последующего использования. Например, 'Windows (?=95|98|NT|2000)' соответствует фрагменту "Windows " в строке "Windows 98", но не соответствует ему в строке "Windows 3.1". "Заглядыванием вперед" не поглощает символы, что означает, что после сопоставления поиск продолжается с позиции, следующей непосредственно за найденным соответствием, а не после символов, включенных в заглядывание вперед.</font></td></tr><tr valign="top"><td width="16%"><font size="1">(?!<i>pattern</i>)</font></td>
<td width="84%"><font size="1">Отрицательное "заглядыванием вперед". Соответствует исходной строке в любой точке где <i>нет</i> начала соответствия шаблону. Это нефиксируемое соответстствие, что означает то, что найденное совпадение не сохраняется для возможного последующего использования. Соответствие с "заглядыванием вперед", происходит при <i>несоответствии</i> строки pattern и без запоминания найденного соответствия. Например, /Windows (?!95|98|NT|2000)/ соответствует фрагменту "Windows " в строке "Windows 3.1", но не соответствует в строке "Windows 98". "Заглядыванием вперед" не поглощает символы, что означает, что после сопоставления поиск продолжается с позиции, следующей непосредственно за найденным соответствием, а не после символов, включенных в заглядывание вперед.</font></td></tr><tr valign="top"><td width="16%"><font size="1"><i>x</i>|<i>y</i></font></td>
<td width="84%"><font size="1">Соответствует или <i>x</i>, или <i>y</i>. Например, 'z|food' соответствует "z" или "food". '(z|f)ood' соответствует "zood" или "food". </font></td></tr><tr valign="top"><td width="16%"><font size="1">[<i>xyz</i>]</font></td>
<td width="84%"><font size="1">Набор символов. Соответствует любому из заключенных в квадратные скобки символов. Например, '[abc]' соответствует 'a' в "plain". </font></td></tr><tr valign="top"><td width="16%"><font size="1">[^<i>xyz</i>]</font></td>
<td width="84%"><font size="1">Отрицательный набор символов. Соответствует любому символу, кроме заключенных в квадратные скобки. Например, '[^abc]' соответствует 'p' в "plain". </font></td></tr><tr valign="top"><td width="16%"><font size="1">[<i>a-z</i>]</font></td>
<td width="84%"><font size="1">Диапазон символов. Соответствует любому символу из указанного диапазона. Например, '[a-z]' соответствует любому алфавитному символу в нижнем регистре в диапазоне от 'a' до 'z'. </font></td></tr><tr valign="top"><td width="16%"><font size="1">[^<i>a-z</i>]</font></td>
<td width="84%"><font size="1">"Отрицательный" диапазон символов. Соответствует любому символу вне указанного диапазона. Например, '[^a-z]' соответствует любому алфавитному символу, не входящему в диапазон от 'a' до 'z'. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\b</font></td>
<td width="84%"><font size="1">Соответствует границе слова, то есть позиции между словом и пробелом. Например, 'er\b' соответствует 'er' в "never", но не соответствует 'er' в "verb". </font></td></tr><tr valign="top"><td width="16%"><font size="1">\B</font></td>
<td width="84%"><font size="1">Соответствует всем символам, кроме границы слов. 'er\B' соответствует 'er' в "verb", но не 'er' в "never". </font></td></tr><tr valign="top"><td width="16%"><font size="1">\c<i>x</i></font></td>
<td width="84%"><font size="1">Соответсвует управляющему символу, указанному в <i>x</i>. К примеру, \cM соответстсвует Ctrl-M или символу перевода каретки. Значение <i>x</i> должно находиться в диапазоне A-Z или a-z. Если это не так, <i>c</i> рассматривается как обычная буква 'c'. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\d</font></td>
<td width="84%"><font size="1">Соответствует цифре. Эквивалентно [0-9]. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\D</font></td>
<td width="84%"><font size="1">Соответствует нецифровому символу. Эквивалентно [^0-9]. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\f</font></td>
<td width="84%"><font size="1">Соответствует символу подачи бланка (FF). Эквивалентно \x0c и \cL.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\n</font></td>
<td width="84%"><font size="1">Соответствует символу перевода строки (LF). Эквивалентно \x0a и \cJ.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\r</font></td>
<td width="84%"><font size="1">Соответствует символу возврата каретки (CR). Эквивалентно \x0d и \cM.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\s</font></td>
<td width="84%"><font size="1">Соответствует любому пробельному символу, включая пробел, табулятор и т.д. Эквивалентно [ \f\n\r\t\v].</font></td></tr><tr valign="top"><td width="16%"><font size="1">\S</font></td>
<td width="84%"><font size="1">Соответствует любому непробельному символу. Эквивалентно [^ \f\n\r\t\v]. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\t</font></td>
<td width="84%"><font size="1">Соответствует символу табуляции (HT). Эквивалентно \x09 и \cI.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\v</font></td>
<td width="84%"><font size="1">Соответствует символу вертикальной табуляции (VT). Эквивалентно \x0b и \cK.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\w</font></td>
<td width="84%"><font size="1">Соответствует латинской букве, цифре или подчеркиванию. Эквивалентно '[A-Za-z0-9_]'. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\W</font></td>
<td width="84%"><font size="1">Соответствует любому символу, кроме латинской буквы, цифры или подчеркивания. Эквивалентно '[^A-Za-z0-9_]'. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\x<i>n</i></font></td>
<td width="84%"><font size="1">n - шестнадцатеричное число, обязательно состоящее из двух цифр. Соответствует символу с шестнадцатеричным кодом n. Например, /\x41/ эквивалентно "A", '\x041' эквивалентно '\x04' &amp; "1". Позволяет использовать ASCII-коды в регулярных выражениях.</font></td></tr><tr valign="top"><td width="16%"><font size="1">\<i>num</i></font></td>
<td width="84%"><font size="1"><i>num</i> представлено положительным целым числом. Является обратной ссылкой на найденные соответствия. Например, '(.)\1' соответствует двум последовательно расположенным идентичным символам. </font></td></tr><tr valign="top"><td width="16%"><font size="1">\<i>n</i></font></td>
<td width="84%"><font size="1">Определяет или восьмеричное значение или обратную ссылку. Если \<i>n</i> предшествуют хотя бы <i>n</i> подвыражений, тогда <i>n</i> соответствует n-ной запомненной подстроке. В обратном случае, <i>n</i> соответствует символу с восьмеричным кодом n, если <i>n</i> соответствует восьмеричной цифре (0-7).</font></td></tr><tr valign="top"><td width="16%"><font size="1">\<i>nm</i></font></td>
<td width="84%"><font size="1">Определяет или восьмеричное значение или обратную ссылку. Если \<i>nm</i> предшествуют хотя бы <i>nm</i> подвыражений, тогда <i>nm</i> - обратная ссылка. Если перед \<i>nm</i> располагается хотя бы <i>n</i> подвыражений, тогда <i>n</i> - это обратная ссылка, за которой расположен обычный символ <i>m</i>. Если ни одно из предыдущих условий не выполняется, тогда \<i>nm</i> соответствует восьмеричному значению <i>nm</i>, где <i>n</i> и <i>m</i> являются восьмеричными цифрами (0-7).</font></td></tr><tr valign="top"><td width="16%"><font size="1">\<i>nml</i></font></td>
<td width="84%"><font size="1">Соответствует символу с восьмеричным кодом <i>nml</i>, если <i>n</i> является восьмеричной цифрой (0-3), а <i>m</i> и <i>l</i> являются восьмеричными цифрами (0-7).</font></td></tr><tr valign="top"><td width="16%"><font size="1">\u<i>n</i></font></td>
<td width="84%"><font size="1">Соответсвует <i>n</i>, где <i>n</i> является Unicode символом, представленным четырьмя шестнадцатеричными цифрами. Например, \u00A9 соответствует копирайт-символу ©.</font></td></tr></tbody></table></div>
<p class="paragraph"><b>Жадность</b>: <small>(Примеч. переводчика: жадный символ из нескольких возможных отвечающих вариантов выберет самый длинный.)</small> по умолчанию, символы <span style="BACKGROUND-COLOR: rgb(246,206,215)">*</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">?</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">+</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">{min,max}</span> являются жадными, поскольку они поглощают все символы, включая последний из тех, что еще отвечают всему шаблону. Чтобы взамен этого, заставить их остановиться на самом коротком из возможных вариантов соответствия, добавьте следом за любым из них знак вопроса. Например, шаблон <span style="BACKGROUND-COLOR: rgb(246,206,215)">&lt;.+&gt;</span> (в котором нет знака вопроса) означает: "найти &lt;, за которым следует одна или большее число литер, за которыми следует &gt;". Такой шаблон захватит всю строку <span style="BACKGROUND-COLOR: rgb(203,248,199)">&lt;em&gt;text&lt;/em&gt;</span>. Добавьте знак вопроса за плюсом: <span style="BACKGROUND-COLOR: rgb(246,206,215)">&lt;.+?&gt;</span>. И поиск остановится на первом символе '&gt;', таким образом этот шаблон отвечает только открывающему тегу <span style="BACKGROUND-COLOR: rgb(203,248,199)">&lt;em&gt;</span>. </p>
<p class="paragraph"><b>Запросы вперед и назад</b>: выражения <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?=...)</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?!...)</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?&lt;=...)</span>, и <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?&lt;!...)</span>, в которых на месте многоточия размещается любой шаблон, назовем запросами (assertion). Они только запрашивают выполнение некоторого условия, но сами не отвечают каким-либо символам. Например, <span style="BACKGROUND-COLOR: rgb(246,206,215)">abc(?=.*xyz)</span> является запросом вперед, проверяющим, существует ли где-либо строка xyz, лежащая правее строки abc (если не существует, то весь шаблон считается не соответствующим). Конструкцию <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?=...)</span> называют позитивным запросом вперед, поскольку он требует, чтобы указанный шаблон находил соответствие впереди. Наоборот, <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?!...)</span> есть негативный запрос вперед, поскольку он требует, чтобы указанный шаблон НЕ находил соответствие впереди. Подобным же образом, <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?&lt;=...)</span> и <span style="BACKGROUND-COLOR: rgb(246,206,215)">(?&lt;!...)</span> представляют соответственно позитивный и негативный запросы назад, поскольку они требуют, чтобы указанный шаблон проверял соответствие слева от текущей позиции. Запросы назад более ограничены в возможностях, чем запросы вперед, поскольку не поддерживают кванторы переменного размера <span style="BACKGROUND-COLOR: rgb(246,206,215)">*</span>, <span style="BACKGROUND-COLOR: rgb(246,206,215)">?</span>, и <span style="BACKGROUND-COLOR: rgb(246,206,215)">+</span>. </p></body></html>